--- title: Curse of Dimensionality keywords: fastai sidebar: home_sidebar summary: "Example with code" description: "Example with code" nb_path: "nbs/07_concepts/curse_of_dimensionality.ipynb" ---
import numpy as np
import pandas as pd
import plotly.express as px
def generate_data(n, dim):
x = np.random.normal(0, 1, (n, dim))
y = np.random.normal(3, 1, (n, dim))
data = np.concatenate([x, y], axis=0)
normalized = (data - data.mean(axis=0)) / data.std(axis=0)
distances = np.linalg.norm(normalized[:, None, :] - normalized[None, :, :], axis=2).flatten()
return distances
n = 100
dims = list(range(1, 10)) + list(range(10, 200, 10))
distances = {dim: generate_data(n, dim) for dim in dims}
df = pd.DataFrame(distances).melt(var_name='dims', value_name='samples')
fig = px.histogram(df, animation_frame='dims', )
fig.update_xaxes(range=[0, 20]);